using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using Gratamira.AccesoDato;



namespace Gratamira.CapaNegocio
{
    public class TipoMovimiento
    {
        #region Atributos
        private string _TipoMovID;
        private string _Nombre;
        private string _Tipo;
        private string _Transferencia = "N";      //El valor de la BD 'S' o 'N'
        private bool _IndTransferencia;     //El valor del control checkbox True or False
        private string _Reserva = "N";      //El valor de la BD 'S' o 'N'
        private bool _IndReserva;     //El valor del control checkbox True or False
        private string _UsuarioCreacion;
        private string _FechaCreacion;
        private string _UsuarioModificacion;
        private string _FechaModificacion;
        private bool _Modificada;
        #endregion

        #region Constructores

        public TipoMovimiento()
        {

        }

        public TipoMovimiento(string ptipoMovID)
        {
            TipoMovID = ptipoMovID;
            leerTipoMovimiento();
        }

        public TipoMovimiento(DataSet dsDatos)
        {
            try
            {
                //Crear instancia a componente de datos
                accesoDatos p = new accesoDatos();

                //Crear DataTable de Bodegas y adicionarlo al DataSet de la clase
                string tSql = "SELECT TipoMovID ID, Nombre, Tipo, Transferencia, Reserva " +
                                "FROM TipoMovimiento " +
                                "WHERE 'A' = 'B' ";
                DataTable dtDatos = new DataTable();
                dtDatos = p.leerDatosSQL(tSql, "Gratamira");
                dtDatos.TableName = "TipoMov";
                dsDatos.Tables.Add(dtDatos);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #region Propiedades

        public string TipoMovID
        {
            get
            {
                return _TipoMovID;
            }
            set
            {
                _TipoMovID = value;
            }
        }

        public string Nombre
        {
            get
            {
                return _Nombre;
            }
            set
            {
                if (_Nombre != value)
                {
                    Modificada = true;
                }
                _Nombre = value;
            }
        }

        public string Tipo
        {
            get
            {
                return _Tipo;
            }
            set
            {
                if (_Tipo != value)
                {
                    Modificada = true;
                }
                _Tipo = value;
            }
        }

        public string Transferencia
        {
            get
            {
                return _Transferencia;
            }
            set
            {
                _Transferencia = value;
                if (value == "S" && !IndTransferencia)
                {
                    IndTransferencia = true;
                }
                else if (value == "N" && IndTransferencia)
                {
                    IndTransferencia = false;
                }
            }
        }

        public bool IndTransferencia
        {
            get
            {
                return _IndTransferencia;
            }
            set
            {
                if (_IndTransferencia != value)
                {
                    Modificada = true;
                }
                _IndTransferencia = value;
                if (value && Transferencia == "N")
                {
                    Transferencia = "S";
                }
                else if (!value && Transferencia == "S")
                {
                    Transferencia = "N";
                }
            }
        }

        public string Reserva
        {
            get
            {
                return _Reserva;
            }
            set
            {
                _Reserva = value;
                if (value == "S" && !IndReserva)
                {
                    IndReserva = true;
                }
                else if (value == "N" && IndReserva)
                {
                    IndReserva = false;
                }
            }
        }

        public bool IndReserva
        {
            get
            {
                return _IndReserva;
            }
            set
            {
                if (_IndReserva != value)
                {
                    Modificada = true;
                }
                _IndReserva = value;
                if (value && Reserva == "N")
                {
                    Reserva = "S";
                }
                else if (!value && Reserva == "S")
                {
                    Reserva = "N";
                }
            }
        }

        public string UsuarioCreacion
        {
            get
            {
                return _UsuarioCreacion.Trim();
            }
            set
            {
                _UsuarioCreacion = value;
            }
        }

        public string UsuarioModificacion
        {
            get
            {
                return _UsuarioModificacion.Trim();
            }
            set
            {
                _UsuarioModificacion = value;
            }
        }

        public string FechaCreacion
        {
            get
            {
                return _FechaCreacion;
            }
            set
            {
                _FechaCreacion = value;
            }
        }

        public string FechaModificacion
        {
            get
            {
                return _FechaModificacion;
            }
            set
            {
                _FechaModificacion = value;
            }
        }

        public bool Modificada
        {
            get
            {
                return _Modificada;
            }
            set
            {
                _Modificada = value;
            }
        }

        #endregion

        #region Metodos

        public void leerTipoMovimiento()
        {
            DataRow fila;
            string strSql = "SELECT * FROM TipoMovimiento  WHERE TipoMovID = '" + TipoMovID + "'";
            DataTable dt = new DataTable();
            accesoDatos p = new accesoDatos();
            dt = p.leerDatosSQL(strSql, "");

            fila = dt.Rows[0];

            Nombre = fila["Nombre"].ToString();
            Tipo = fila["Tipo"].ToString();
            Transferencia = fila["Transferencia"].ToString();
            Reserva = fila["Reserva"].ToString();
            UsuarioCreacion = fila["CodUsuCre"].ToString();
            UsuarioModificacion = fila["UsuUltMod"].ToString();
            FechaCreacion = fila["FecHorCre"].ToString();
            FechaModificacion = fila["FecUltMod"].ToString();
            Modificada = false;
        }

        public DataTable leerListaTipoMovimiento(claseMovimiento pClaseMovimiento, bool conTransferencia)
        {
            string strSql = "SELECT TipoMovID, Nombre, Tipo, Transferencia, Reserva " +
                            " FROM TipoMovimiento ";
            if (pClaseMovimiento == claseMovimiento.Entrada)
            {
                strSql += " WHERE Tipo = 'ENTRADA' ";
                if (!conTransferencia)
                {
                    strSql += " AND Transferencia = 'N'";
                }
            }
            else
            {
                    strSql += " WHERE Tipo = 'SALIDA' ";
            }
            strSql += "ORDER BY Transferencia, TipoMovID";
            DataTable dt = new DataTable();
            accesoDatos p = new accesoDatos();
            dt = p.leerDatosSQL(strSql, "");
            return dt;
        }

        public void leerTipoMovimiento(string valor, campoFiltro tipo, DataSet dsDatos)
        {
            string tSql = "SELECT TipoMovID ID, Nombre, Tipo, Transferencia, Reserva " +
                                "FROM TipoMovimiento ";
            switch (tipo)
            {
                case campoFiltro.ID:
                    tSql += "WHERE TipoMovID like '%" + valor + "%' ";
                    break;
                case campoFiltro.Nombre:
                    tSql += "WHERE Nombre like '%" + valor + "%' ";
                    break;
            }
            tSql += "ORDER BY TipoMovID";
            DataTable dt = new DataTable();
            accesoDatos p = new accesoDatos();
            dt = p.leerDatosSQL(tSql, "");
            dsDatos.Clear();
            foreach (DataRow tFila in dt.Rows)
            {
                DataRow nFila = dsDatos.Tables["TipoMov"].NewRow();
                nFila.ItemArray = tFila.ItemArray;
                dsDatos.Tables["TipoMov"].Rows.Add(nFila);
            }
        }

        /// <summary>
        /// Modificada por AV 04Ago2007
        /// </summary>
        /// <param name="pCodigoEntrada"></param>
        /// <param name="pCodigoSalida"></param>
        /// <param name="pDescripSalida"></param>
        public DataTable leerTipoTransferencia()
        {
            string strSql = "SELECT P.Tipo as Tipo_Movimiento, TM.Nombre, TM.Tipo FROM parametro P INNER JOIN TipoMovimiento TM ON " +
                            "P.tipo = TM.TipoMovID WHERE P.Nombre = 'SALTRA' OR P.Nombre = 'ENTTRA'";

            DataTable dt = new DataTable();
            accesoDatos p = new accesoDatos();
            dt = p.leerDatosSQL(strSql, "Gratamira");

            return dt;
            //Parametros: out string  pCodigoEntrada, out string  pCodigoSalida, out string pDescripSalida
            //string buscar = "Tipo = 'Salida'";
            //DataRow[] foundRow = dt.Select(buscar);
            //pCodigoSalida = foundRow[0]["Tipo_Movimiento"].ToString();
            //pDescripSalida = foundRow[0]["Nombre"].ToString();

            //buscar = "Tipo = 'Entrada'";
            //foundRow = dt.Select(buscar);
            //pCodigoEntrada = foundRow[0]["Tipo_Movimiento"].ToString();
        }

        public void eliminarTipoMovimiento(string pTipoMovID)
        {
            accesoDatos p = new accesoDatos();
            p.ejecutarSQL("DELETE FROM TipoMovimiento WHERE TipoMovID = '" + pTipoMovID + "'", "Gratamira");
        }

        public bool insertarTipoMovimiento()
        {
            accesoDatos p = new accesoDatos();
            string tSql = "INSERT INTO TipoMovimiento " +
                            "(TipoMovID, Nombre, Tipo, Transferencia, Reserva, " +
                            "CodUsuCre, FecHorCre, UsuUltMod, FecUltMod) VALUES ";

            tSql += "  ('" + TipoMovID + "','" + Nombre + "','" + Tipo + "', '" + Transferencia + "','" + Reserva + "'";
            tSql += ",'" + UsuarioCreacion + "',getdate(),'" + UsuarioModificacion + "', getdate())";

            p.ejecutarSQL(tSql, "Gratamira");
            Modificada = false;
            return true;
        }

        public void actualizarTipoMovimiento()
        {
            accesoDatos p = new accesoDatos();
            string tSql = "UPDATE TipoMovimiento SET  Nombre = '" + Nombre + "'" +
                          ", Tipo = '" + Tipo + "'" +
                          ", Transferencia = '" + Transferencia + "'" +
                          ", Reserva = '" + Reserva + "'" +
                          ", UsuUltMod = '" + UsuarioModificacion + "'" +
                          ", FecUltMod = getdate()";

            tSql += "  WHERE TipoMovID = '" + TipoMovID + "'";
            p.ejecutarSQL(tSql, "Gratamira");

            Modificada = false;
            FechaModificacion = System.DateTime.Now.ToString();
        }
        #endregion
    }
}
